home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / c / datelib.exe / WEEKDAY.C < prev    next >
C/C++ Source or Header  |  1992-03-27  |  4KB  |  134 lines

  1. static char weekday_prog[]   = "@(#) int weekday(int tag,int monat,int jahr)";
  2. static char weekday_s_prog[] = "@(#) int weekday_s(char *datestring)";
  3. static char weekday_ver[]    = "@(#) v1.00/kr ; 17.05.91";
  4. /* weekday      Funktionen zum Ermitteln eines beliebigen Wochentages
  5. **
  6. ** Deklaration  int weekday(int tag, int monat, int jahr);
  7. **              int weekday_s(char *datestring);
  8. **
  9. ** Rückgabe     Wochentagsnummer( Montag=1,..) oder 0 im Fehlerfall
  10. **
  11. ** Autor        Klaus Rath ( weekday beruht auf einer Beispielfunktion aus
  12. **                           dem Nixdorf-Handbuch "Die Sprache C" )
  13. **
  14. ** Anmerkungen  weekday überprüft nur, ob Tag oder Monat den innerhalb eines
  15. **              Intervalls 1..31 bzw. 1..12 liegen, sowie ob das Jahr >= 0
  16. **              ist. Falls diese Bedingungen nicht erfüllt sind, wird 0
  17. **              zurückgegeben. Eine eingehendere Prüfung wird hier nicht
  18. **              durchgeführt !!!
  19. **              weekday_s verarbeitet nur vollständige Datümer, d.h. es wer-
  20. **              nur die langen Formate tt.mm.jjjj, mm/tt/jjjj und jjjjmmtt
  21. **              akzeptiert. Dies wird überprüft und im Fehlerfall 0 zurück-
  22. **              gegeben. Anschließend wird mit erzeugten int-Werten weekday
  23. **              aufgerufen.
  24. **              Die Übergabe von korrekten Datümern an weekday_s kann mit
  25. **              der Funktion checkdate() überprüft werden !
  26. */
  27.  
  28. int weekday(int tag,int monat,int jahr)
  29. {
  30.     int jahrfak,ergebnis;
  31.  
  32.     jahrfak = ergebnis = 0;
  33.  
  34.     if ( tag < 1 || tag > 31 || monat < 1 || monat > 12 || jahr < 0 )
  35.         return(0);
  36.  
  37.     jahrfak = jahr + ( monat-14)/12;
  38.  
  39.     ergebnis = ( ( ( 13 * (monat + 10 - (monat + 10)/13 * 12) - 1 ) / 5
  40.                   + tag + 77 + 5*(jahrfak % 100)/4
  41.                   + jahrfak/400 - jahrfak/100*2 ) % 7 + 1 );
  42.  
  43.     switch ( ergebnis ) {
  44.         case 1: ergebnis = 7;
  45.                 break;
  46.         case 2: ergebnis = 1;
  47.                 break;
  48.         case 3: ergebnis = 2;
  49.                 break;
  50.         case 4: ergebnis = 3;
  51.                 break;
  52.         case 5: ergebnis = 4;
  53.                 break;
  54.         case 6: ergebnis = 5;
  55.                 break;
  56.         case 7: ergebnis = 6;
  57.                 break;
  58.         default:ergebnis = 0;
  59.     } /* ENDE: switch */
  60.  
  61.     return(ergebnis);
  62. }
  63.  
  64. #include <stdlib.h>
  65.  
  66. int weekday_s(char *datestring)
  67. {
  68.     int  ergebnis,jahr,monat,tag;
  69.     char jahr_s[5];
  70.     char monat_s[3];
  71.     char tag_s[3];
  72.     int  laenge;
  73.  
  74.     ergebnis = jahr = monat = tag = laenge = 0;
  75.  
  76.     laenge = strlen(datestring);
  77.  
  78.     if ( !( laenge == 10 || laenge == 8 ) )
  79.         return(0);
  80.  
  81.     if ( datestring[2] == '.' && laenge == 10 ) {
  82.         tag_s[0]   = datestring[0];
  83.         tag_s[1]   = datestring[1];
  84.         tag_s[2]   = '\0';
  85.         monat_s[0] = datestring[3];
  86.         monat_s[1] = datestring[4];
  87.         monat_s[2] = '\0';
  88.         jahr_s[0]  = datestring[6];
  89.         jahr_s[1]  = datestring[7];
  90.         jahr_s[2]  = datestring[8];
  91.         jahr_s[3]  = datestring[9];
  92.         jahr_s[4]  = '\0';
  93.     }
  94.     else if ( datestring[2] == '/' && laenge == 10 ) {
  95.         tag_s[0]   = datestring[3];
  96.         tag_s[1]   = datestring[4];
  97.         tag_s[2]   = '\0';
  98.         monat_s[0] = datestring[0];
  99.         monat_s[1] = datestring[1];
  100.         monat_s[2] = '\0';
  101.         jahr_s[0]  = datestring[6];
  102.         jahr_s[1]  = datestring[7];
  103.         jahr_s[2]  = datestring[8];
  104.         jahr_s[3]  = datestring[9];
  105.         jahr_s[4]  = '\0';
  106.     }
  107.     else if ( laenge == 8 ) {
  108.         tag_s[0]   = datestring[6];
  109.         tag_s[1]   = datestring[7];
  110.         tag_s[2]   = '\0';
  111.         monat_s[0] = datestring[4];
  112.         monat_s[1] = datestring[5];
  113.         monat_s[2] = '\0';
  114.         jahr_s[0]  = datestring[0];
  115.         jahr_s[1]  = datestring[1];
  116.         jahr_s[2]  = datestring[2];
  117.         jahr_s[3]  = datestring[3];
  118.         jahr_s[4]  = '\0';
  119.     }
  120.     else
  121.         return(0);
  122.  
  123.     tag   = atoi(tag_s);
  124.     monat = atoi(monat_s);
  125.     jahr  = atoi(jahr_s);
  126.  
  127.     if ( tag < 1 || tag > 31 || monat < 1 || monat > 12 || jahr < 0 )
  128.         return(0);
  129.  
  130.     ergebnis = weekday(tag,monat,jahr);
  131.  
  132.     return(ergebnis);
  133. }
  134.